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