[{"data":1,"prerenderedAt":651},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon01-f":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon01-f":464,"sidebar-sei-cert-fortran-coding-standard":473},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":30,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24,27],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard\u002F",{"title":25,"path":26},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":28,"path":29},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":32,"title":33,"body":34,"description":457,"extension":458,"meta":459,"navigation":7,"path":460,"seo":461,"stem":462,"__hash__":463},"content\u002F9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F2.con01-f.md","CON01-F. Explicitly declare OpenMP data-sharing attributes for all variables",{"type":35,"value":36,"toc":451},"minimark",[37,41,65,68,73,94,210,214,232,318,322,325,387,390,413,417,447],[38,39,33],"h1",{"id":40},"con01-f-explicitly-declare-openmp-data-sharing-attributes-for-all-variables",[42,43,44,45,49,50,53,54,53,57,60,61,64],"p",{},"All variables used within an OpenMP parallel region should have their data-sharing attributes explicitly declared, using the ",[46,47,48],"code",{},"default(none)"," OpenMP clause. Specific attributes should then be assigned to each variable with OpenMP clauses such as ",[46,51,52],{},"shared"," , ",[46,55,56],{},"private",[46,58,59],{},"firstprivate"," , or ",[46,62,63],{},"reduction"," .",[42,66,67],{},"In Fortran, any variable used within a parallel region that lacks an explicitly declared data-sharing attribute will receive a default attribute from the compiler. If a variable intended to be private per thread is instead implicitly shared, multiple threads may modify it concurrently, leading to non-deterministic results and race conditions.",[69,70,72],"h2",{"id":71},"noncompliant-code-example","Noncompliant Code Example",[42,74,75,76,79,80,83,84,86,87,89,90,93],{},"In this noncompliant example, the variable ",[46,77,78],{},"temp"," is used to hold an intermediate calculation. The programmer has not specified a ",[46,81,82],{},"default"," clause. In many OpenMP implementations, scalar variables declared outside the parallel region default to ",[46,85,52],{},". Consequently, all threads race to read and write to the same memory location for ",[46,88,78],{},", leading to incorrect values in ",[46,91,92],{},"result",".",[95,96,98],"code-block",{"quality":97},"bad",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-fortran shiki shiki-themes github-light-high-contrast github-dark-high-contrast monokai","subroutine parallel_square(n, input_arr, result_arr)\n  implicit none\n  integer, intent(in)  :: n\n  integer, intent(in)  :: input_arr(n)\n  integer, intent(out) :: result_arr(n)\n  integer              :: i, temp        ! 'temp' is declared in the host scope\n\n  ! Noncompliant: 'temp' is implicitly shared.\n  ! Race condition occurs when multiple threads write to 'temp'\n  !$omp parallel do\n  do i = 1, n\n    temp = input_arr(i) * input_arr(i)\n    result_arr(i) = temp\n  end do\n  !$omp end parallel do\n\nend subroutine parallel_square\n","fortran","",[46,106,107,115,121,127,133,139,145,151,157,163,169,175,181,187,193,199,204],{"__ignoreMap":104},[108,109,112],"span",{"class":110,"line":111},"line",1,[108,113,114],{},"subroutine parallel_square(n, input_arr, result_arr)\n",[108,116,118],{"class":110,"line":117},2,[108,119,120],{},"  implicit none\n",[108,122,124],{"class":110,"line":123},3,[108,125,126],{},"  integer, intent(in)  :: n\n",[108,128,130],{"class":110,"line":129},4,[108,131,132],{},"  integer, intent(in)  :: input_arr(n)\n",[108,134,136],{"class":110,"line":135},5,[108,137,138],{},"  integer, intent(out) :: result_arr(n)\n",[108,140,142],{"class":110,"line":141},6,[108,143,144],{},"  integer              :: i, temp        ! 'temp' is declared in the host scope\n",[108,146,148],{"class":110,"line":147},7,[108,149,150],{"emptyLinePlaceholder":7},"\n",[108,152,154],{"class":110,"line":153},8,[108,155,156],{},"  ! Noncompliant: 'temp' is implicitly shared.\n",[108,158,160],{"class":110,"line":159},9,[108,161,162],{},"  ! Race condition occurs when multiple threads write to 'temp'\n",[108,164,166],{"class":110,"line":165},10,[108,167,168],{},"  !$omp parallel do\n",[108,170,172],{"class":110,"line":171},11,[108,173,174],{},"  do i = 1, n\n",[108,176,178],{"class":110,"line":177},12,[108,179,180],{},"    temp = input_arr(i) * input_arr(i)\n",[108,182,184],{"class":110,"line":183},13,[108,185,186],{},"    result_arr(i) = temp\n",[108,188,190],{"class":110,"line":189},14,[108,191,192],{},"  end do\n",[108,194,196],{"class":110,"line":195},15,[108,197,198],{},"  !$omp end parallel do\n",[108,200,202],{"class":110,"line":201},16,[108,203,150],{"emptyLinePlaceholder":7},[108,205,207],{"class":110,"line":206},17,[108,208,209],{},"end subroutine parallel_square\n",[69,211,213],{"id":212},"compliant-solution","Compliant Solution",[42,215,216,217,219,220,222,223,225,226,229,230,93],{},"In this compliant solution, the ",[46,218,48],{}," OpenMP clause is applied. This forces the compiler to verify that every variable appearing in the block has a data-sharing attribute. The variable ",[46,221,78],{}," is explicitly declared ",[46,224,56],{},", ensuring each thread has its own local instance. The arrays and size ",[46,227,228],{},"n"," are explicitly declared ",[46,231,52],{},[95,233,235],{"quality":234},"good",[99,236,238],{"className":101,"code":237,"language":103,"meta":104,"style":104},"subroutine parallel_square(n, input_arr, result_arr)\n  implicit none\n  integer, intent(in)  :: n\n  integer, intent(in)  :: input_arr(n)\n  integer, intent(out) :: result_arr(n)\n  integer              :: i, temp ! 'temp' is declared in the host scope\n\n  ! Compliant: default(none) forces explicit declaration.\n  !$omp parallel do default(none) &\n  !$omp shared(n, input_arr, result_arr) &\n  !$omp private(i, temp)\n  do i = 1, n\n    temp = input_arr(i) * input_arr(i)\n    result_arr(i) = temp\n  end do\n  !$omp end parallel do\n\nend subroutine parallel_square\n",[46,239,240,244,248,252,256,260,265,269,274,279,284,289,293,297,301,305,309,313],{"__ignoreMap":104},[108,241,242],{"class":110,"line":111},[108,243,114],{},[108,245,246],{"class":110,"line":117},[108,247,120],{},[108,249,250],{"class":110,"line":123},[108,251,126],{},[108,253,254],{"class":110,"line":129},[108,255,132],{},[108,257,258],{"class":110,"line":135},[108,259,138],{},[108,261,262],{"class":110,"line":141},[108,263,264],{},"  integer              :: i, temp ! 'temp' is declared in the host scope\n",[108,266,267],{"class":110,"line":147},[108,268,150],{"emptyLinePlaceholder":7},[108,270,271],{"class":110,"line":153},[108,272,273],{},"  ! Compliant: default(none) forces explicit declaration.\n",[108,275,276],{"class":110,"line":159},[108,277,278],{},"  !$omp parallel do default(none) &\n",[108,280,281],{"class":110,"line":165},[108,282,283],{},"  !$omp shared(n, input_arr, result_arr) &\n",[108,285,286],{"class":110,"line":171},[108,287,288],{},"  !$omp private(i, temp)\n",[108,290,291],{"class":110,"line":177},[108,292,174],{},[108,294,295],{"class":110,"line":183},[108,296,180],{},[108,298,299],{"class":110,"line":189},[108,300,186],{},[108,302,303],{"class":110,"line":195},[108,304,192],{},[108,306,307],{"class":110,"line":201},[108,308,198],{},[108,310,311],{"class":110,"line":206},[108,312,150],{"emptyLinePlaceholder":7},[108,314,316],{"class":110,"line":315},18,[108,317,209],{},[69,319,321],{"id":320},"risk-assessment","Risk Assessment",[42,323,324],{},"Failure to explicitly declare data-sharing attributes leads to default behaviors that vary across compiler implementations and often result in data races. These data races cause non-deterministic behavior, incorrect calculation results, and difficult-to-debug runtime errors.",[326,327,328,356],"table",{},[329,330,331],"thead",{},[332,333,334,338,341,344,347,350,353],"tr",{},[335,336,337],"th",{},"Rule",[335,339,340],{},"Severity",[335,342,343],{},"Likelihood",[335,345,346],{},"Detectable",[335,348,349],{},"Repairable",[335,351,352],{},"Priority",[335,354,355],{},"Level",[357,358,359],"tbody",{},[332,360,361,365,368,371,374,376,382],{},[362,363,364],"td",{},"CON01-F",[362,366,367],{},"Medium",[362,369,370],{},"Likely",[362,372,373],{},"Yes",[362,375,373],{},[362,377,378],{},[379,380,381],"strong",{},"P12",[362,383,384],{},[379,385,386],{},"L1",[388,389],"hr",{},[42,391,392,400,401,400,407],{},[393,394,396],"a",{"href":395},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002Fpre30-c",[397,398],"img",{"src":399},"attachments\u002F626524181\u002F638779587.png"," ",[393,402,404],{"href":403},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002F",[397,405],{"src":406},"attachments\u002F626524181\u002F638779588.png",[393,408,410],{"href":409},"\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f",[397,411],{"src":412},"attachments\u002F626524181\u002F638779589.png",[69,414,416],{"id":415},"attachments","Attachments:",[418,419,423],"div",{"className":420,"align":422},[421],"greybox","left",[42,424,425,400,428,431,432,435,400,437,431,440,442,400,444,431],{},[397,426],{"alt":104,"src":427},"images\u002Ficons\u002Fbullet_blue.gif",[393,429,430],{"href":399},"button_arrow_left.png"," (image\u002Fpng)",[433,434],"br",{},[397,436],{"alt":104,"src":427},[393,438,439],{"href":406},"button_arrow_up.png",[433,441],{},[397,443],{"alt":104,"src":427},[393,445,446],{"href":412},"button_arrow_right.png",[448,449,450],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":104,"searchDepth":117,"depth":117,"links":452},[453,454,455,456],{"id":71,"depth":117,"text":72},{"id":212,"depth":117,"text":213},{"id":320,"depth":117,"text":321},{"id":415,"depth":117,"text":416},"All variables used within an OpenMP parallel region should have their data-sharing attributes explicitly declared, using the default(none) OpenMP clause. Specific attributes should then be assigned to each variable with OpenMP clauses such as shared , private , firstprivate , or reduction .","md",{},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon01-f",{"title":33,"description":457},"9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F2.con01-f","C-dsAk4Kk2r5mNNoQDyqJR_P3ezU3-TSdKgB9iPYg4E",[465,469],{"title":466,"path":467,"stem":468,"children":-1},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F1.index",{"title":470,"path":471,"stem":472,"children":-1},"CON02-F. Protect reduction variables in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F3.con02-f",[474],{"title":475,"path":476,"stem":477,"children":478},"SEI CERT Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard\u002F01.index",[479,480,492,647],{"title":475,"path":476,"stem":477},{"title":481,"path":482,"stem":483,"children":484},"Front Matter","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F1.index",[485,486],{"title":481,"path":482,"stem":483},{"title":487,"path":488,"stem":489,"children":490},"Introduction","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter\u002Fintroduction","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F2.introduction\u002F01.index",[491],{"title":487,"path":488,"stem":489},{"title":493,"path":494,"stem":495,"children":496},"Guidelines","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F01.index",[497,498,520,534,551,561,571,589,607,625],{"title":493,"path":494,"stem":495},{"title":499,"path":500,"stem":501,"children":502},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F1.index",[503,504,508,512,516],{"title":499,"path":500,"stem":501},{"title":505,"path":506,"stem":507},"ARR01-F. Do not use out-of-bounds arrays subscripts","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F2.arr01-f",{"title":509,"path":510,"stem":511},"ARR02-F. Declare array dummy arguments as assumed-shape","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F3.arr02-f",{"title":513,"path":514,"stem":515},"ARR03-F. Specify array bounds when copying data to device memory","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F4.arr03-f",{"title":517,"path":518,"stem":519},"ARR04-F. Ensure arrays ranges mapped to devices cover all accessed elements","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F5.arr04-f",{"title":521,"path":522,"stem":523,"children":524},"Attribute Declarations and Specifications (ADS)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F1.index",[525,526,530],{"title":521,"path":522,"stem":523},{"title":527,"path":528,"stem":529},"ADS01-F. Explicitly declare pure procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads\u002Fads01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F2.ads01-f",{"title":531,"path":532,"stem":533},"ADS02-F. Separate initialization from declaration to avoid implicit variable persistence","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads\u002Fads02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F2.ads02-f",{"title":466,"path":467,"stem":468,"children":535},[536,537,538,539,543,547],{"title":466,"path":467,"stem":468},{"title":33,"path":460,"stem":462},{"title":470,"path":471,"stem":472},{"title":540,"path":541,"stem":542},"CON03-F. Protect multithreading recurrences to avoid data races","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F4.con03-f",{"title":544,"path":545,"stem":546},"CON04-F. Do not use out-of-dimension subscripts in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F5.con04-f",{"title":548,"path":549,"stem":550},"CON05-F. Ensure correct OpenMP datascoping of variables in parallel regions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon05-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F6.con05-f",{"title":552,"path":553,"stem":554,"children":555},"Exceptions and IEEE Arithmetic (EIA)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexceptions-and-ieee-arithmetic-eia","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F05.exceptions-and-ieee-arithmetic-eia\u002F1.index",[556,557],{"title":552,"path":553,"stem":554},{"title":558,"path":559,"stem":560},"EIA01-F. Enforce evaluation order in floating-point expressions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexceptions-and-ieee-arithmetic-eia\u002Feia01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F05.exceptions-and-ieee-arithmetic-eia\u002F2.eia01-f",{"title":562,"path":563,"stem":564,"children":565},"Expressions and Assignment (EXA)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexpressions-and-assignment-exa","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F07.expressions-and-assignment-exa\u002F1.index",[566,567],{"title":562,"path":563,"stem":564},{"title":568,"path":569,"stem":570},"EXA01-F. Do not read uninitialized memory","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexpressions-and-assignment-exa\u002Fexa01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F07.expressions-and-assignment-exa\u002F2.exa01-f",{"title":572,"path":573,"stem":574,"children":575},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F1.index",[576,577,581,585],{"title":572,"path":573,"stem":574},{"title":578,"path":579,"stem":580},"MSC01-F. Avoid using legacy or obsolescent Fortran constructs","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F2.msc01-f",{"title":582,"path":583,"stem":584},"MSC02-F. Beware of compiler-specific extensions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F3.msc02-f",{"title":586,"path":587,"stem":588},"MSC03-F. Do not depend on undefined behavior","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F4.msc03-f",{"title":590,"path":591,"stem":592,"children":593},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F1.index",[594,595,599,603],{"title":590,"path":591,"stem":592},{"title":596,"path":597,"stem":598},"PRC01-F. Disable the implicit declaration of procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F2.prc01-f",{"title":600,"path":601,"stem":602},"PRC02-F. Avoid implicit interfaces by using module procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F3.prc02-f",{"title":604,"path":605,"stem":606},"PRC03-F. Declare the intent for all dummy arguments","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F4.prc03-f",{"title":608,"path":609,"stem":610,"children":611},"Scope, Association, and Definition (SAD)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F1.index",[612,613,617,621],{"title":608,"path":609,"stem":610},{"title":614,"path":615,"stem":616},"SAD02-F. Minimize imported module entities using the ONLY clause","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Fsad02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F2.sad02-f",{"title":618,"path":619,"stem":620},"SAD03-F. Replace common block with modules for safer data encapsulation","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Fsad03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F3.sad03-f",{"title":622,"path":623,"stem":624},"Limit the scope of variables and procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Flimit-the-scope-of-variables-and-procedures","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F4.limit-the-scope-of-variables-and-procedures",{"title":626,"path":627,"stem":628,"children":629},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F1.index",[630,631,635,639,643],{"title":626,"path":627,"stem":628},{"title":632,"path":633,"stem":634},"TYP01-F. Use Intrinsic Assignment for Character Entities","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F2.typ01-f",{"title":636,"path":637,"stem":638},"TYP02-F. Prohibit implicit typing in all program units","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F3.typ02-f",{"title":640,"path":641,"stem":642},"TYP03-F. Ensure intrinsic function arguments match intended precision","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F4.typ03-f",{"title":644,"path":645,"stem":646},"TYP04-F. Centralize kind definitions to ensure consistent precision","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F5.typ04-f",{"title":648,"path":649,"stem":650},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",1783713877458]