| 1 |
cnh |
1.1 |
<html> |
| 2 |
|
|
<head> |
| 3 |
|
|
<title>/mnt/home/cnh/src/MITgcm_contrib_HEAD_2005_02_14/PRM/prmtop_mod.dir/prmtop.F90.html</title> |
| 4 |
|
|
<meta name="Generator" content="Vim/6.3"> |
| 5 |
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
| 6 |
|
|
</head> |
| 7 |
|
|
<body bgcolor="#ffffff" text="#000000"> |
| 8 |
|
|
<pre> |
| 9 |
|
|
<font color="#a020f0">MODULE</font> PRMTop |
| 10 |
|
|
|
| 11 |
|
|
<font color="#a020f0">USE</font> EEsmfMod |
| 12 |
|
|
|
| 13 |
|
|
<font color="#0000ff">! Internal state type for a PRMTop component</font> |
| 14 |
|
|
<font color="#0000ff">! nSets :: Total number of component sets in this PRM.</font> |
| 15 |
|
|
<font color="#0000ff">! cTypeArr :: Array of nSets values that specify the </font> |
| 16 |
|
|
<font color="#0000ff">! :: component type of the components in</font> |
| 17 |
|
|
<font color="#0000ff">! :: a component set.</font> |
| 18 |
|
|
<font color="#0000ff">! ncTypeArr :: Number of entries in cTypeArr (should </font> |
| 19 |
|
|
<font color="#0000ff">! :: be the same as nSets).</font> |
| 20 |
|
|
<font color="#0000ff">! fPrefArr :: Array of prefix strings used to name</font> |
| 21 |
|
|
<font color="#0000ff">! :: the components.</font> |
| 22 |
|
|
<font color="#0000ff">! nFPrefArr :: Number of entries in fPrefArr (should</font> |
| 23 |
|
|
<font color="#0000ff">! :: be the same as nSets).</font> |
| 24 |
|
|
<font color="#0000ff">! nComps :: Number of components in each component</font> |
| 25 |
|
|
<font color="#0000ff">! :: set.</font> |
| 26 |
|
|
<font color="#0000ff">! nNComps :: Number of entries in the nComps list.</font> |
| 27 |
|
|
<font color="#0000ff">! :: (should be the same as nSets).</font> |
| 28 |
|
|
<font color="#0000ff">! topTimeStep :: Time step for PRMTop.</font> |
| 29 |
|
|
<font color="#0000ff">! topStartStep :: Time to start run.</font> |
| 30 |
|
|
<font color="#0000ff">! topEndTime :: Time to end run.</font> |
| 31 |
|
|
<font color="#0000ff">! topStartStep :: Starting step number.</font> |
| 32 |
|
|
<font color="#0000ff">! rootDirectory :: Root directory for all relative pathnames used</font> |
| 33 |
|
|
<font color="#0000ff">! :: in PRMTop</font> |
| 34 |
|
|
<font color="#2e8b57"><b>TYPE</b></font> PRMTopInternalState |
| 35 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: nSets |
| 36 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font>(<font color="#2e8b57"><b>LEN</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1024</font>), <font color="#2e8b57"><b>POINTER</b></font> :: cTypeArr(:) |
| 37 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: nCTypeArr |
| 38 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font>(<font color="#2e8b57"><b>LEN</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1024</font>), <font color="#2e8b57"><b>POINTER</b></font> :: fPrefArr(:) |
| 39 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: nFPrefArr |
| 40 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font>, <font color="#2e8b57"><b>POINTER</b></font> :: nComps(:) |
| 41 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: nNComps |
| 42 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: topTimeStep |
| 43 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: topStartTime |
| 44 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: topEndTime |
| 45 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: topStartStep |
| 46 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font>(<font color="#2e8b57"><b>LEN</b></font><font color="#a52a2a"><b>=</b></font>MAX_DIR_NAME), <font color="#2e8b57"><b>POINTER</b></font> :: rootDirectory |
| 47 |
|
|
<font color="#2e8b57"><b>END TYPE</b></font> |
| 48 |
|
|
|
| 49 |
|
|
<font color="#a020f0">CONTAINS</font> |
| 50 |
|
|
|
| 51 |
|
|
<font color="#a020f0">SUBROUTINE</font> ComponentsInit( theComponents ) |
| 52 |
|
|
<font color="#0000ff">!</font> |
| 53 |
|
|
<font color="#0000ff">! Set up the components for this experiment.</font> |
| 54 |
|
|
<font color="#0000ff">! This is done by allocating a series of combined component and state</font> |
| 55 |
|
|
<font color="#0000ff">! derived type objects. The returned list of components is then assigned </font> |
| 56 |
|
|
<font color="#0000ff">! to point to this set of objects.</font> |
| 57 |
|
|
|
| 58 |
|
|
<font color="#0000ff">! Routine arguments</font> |
| 59 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfComponentList ), <font color="#2e8b57"><b>POINTER</b></font> :: theComponents |
| 60 |
|
|
|
| 61 |
|
|
<font color="#0000ff">! Local variables</font> |
| 62 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( PRMTopInternalState ), <font color="#2e8b57"><b>POINTER</b></font> :: internalState |
| 63 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfGridComp ), <font color="#2e8b57"><b>ALLOCATABLE</b></font> :: coarseGridOcean(:) |
| 64 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfGridComp ), <font color="#2e8b57"><b>ALLOCATABLE</b></font> :: fineGridOceans(:) |
| 65 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfCplComp ), <font color="#2e8b57"><b>ALLOCATABLE</b></font> :: coarse2fine(:) |
| 66 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfCplComp ), <font color="#2e8b57"><b>ALLOCATABLE</b></font> :: fine2coarse(:) |
| 67 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfGridComp ), <font color="#2e8b57"><b>POINTER</b></font> :: gcArr(:) |
| 68 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfCplComp ), <font color="#2e8b57"><b>POINTER</b></font> :: ccArr(:) |
| 69 |
|
|
|
| 70 |
|
|
<font color="#0000ff">!</font> |
| 71 |
|
|
<font color="#0000ff">! Boot up ESMF</font> |
| 72 |
|
|
<font color="#a020f0">CALL</font> PRMBoot( <font color="#ff00ff">'prmtop.rc'</font>, internalState ) |
| 73 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( internalState%nFPrefArr <font color="#a52a2a"><b>.NE.</b></font> internalState%nSets ) <font color="#a52a2a"><b>THEN</b></font> |
| 74 |
|
|
<font color="#a52a2a"><b>STOP</b></font> <font color="#ff00ff">'ABNORMAL END: PRMTop found too few file prefix entries'</font> |
| 75 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 76 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( internalState%nCTypeArr <font color="#a52a2a"><b>.NE.</b></font> internalState%nSets ) <font color="#a52a2a"><b>THEN</b></font> |
| 77 |
|
|
<font color="#a52a2a"><b>STOP</b></font> <font color="#ff00ff">'ABNORMAL END: PRMTop found too few component type entries'</font> |
| 78 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 79 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( internalState%nNComps <font color="#a52a2a"><b>.NE.</b></font> internalState%nSets ) <font color="#a52a2a"><b>THEN</b></font> |
| 80 |
|
|
<font color="#a52a2a"><b>STOP</b></font> <font color="#ff00ff">'ABNORMAL END: PRMTop found too few component count entries'</font> |
| 81 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 82 |
|
|
<font color="#0000ff">!</font> |
| 83 |
|
|
<font color="#0000ff">! Allocate requested gridded and coupler components.</font> |
| 84 |
|
|
<font color="#a52a2a"><b>DO</b></font> I<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font>,internalState%nSets |
| 85 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( <font color="#6a5acd">TRIM</font>(internalState%cTypeArr(I)) <font color="#a52a2a"><b>.EQ.</b></font> <font color="#ff00ff">'gridded'</font> ) <font color="#a52a2a"><b>THEN</b></font> |
| 86 |
|
|
<font color="#a020f0">CALL</font> EEsmfAllocGridC( gcArr, internalState%nComps(I) ) |
| 87 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 88 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( <font color="#6a5acd">TRIM</font>(internalState%cTypeArr(I)) <font color="#a52a2a"><b>.EQ.</b></font> <font color="#ff00ff">'coupler'</font> ) <font color="#a52a2a"><b>THEN</b></font> |
| 89 |
|
|
<font color="#a020f0">CALL</font> EEsmfAllocCplC( ccArr, internalState%nComps(I) ) |
| 90 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 91 |
|
|
<font color="#a52a2a"><b>ENDDO</b></font> |
| 92 |
|
|
<font color="#a020f0">CALL</font> PRMShut( internalState ) |
| 93 |
|
|
<font color="#0000ff">! CALL EEsmfAllocGridC( coarseGridOcean, 1 )</font> |
| 94 |
|
|
<font color="#0000ff">! CALL EEsmfAllocGridC( fineGridOceans, nFine )</font> |
| 95 |
|
|
<font color="#0000ff">! CALL EEsmfAllocCplC( coarse2Fine, nFine )</font> |
| 96 |
|
|
<font color="#0000ff">! CALL EEsmfAllocCplC( fine2Coarse, 1 )</font> |
| 97 |
|
|
<font color="#0000ff">!</font> |
| 98 |
|
|
<font color="#0000ff">! Setup the components we need</font> |
| 99 |
|
|
<font color="#a020f0">CALL</font> EEsmfMakeGridComp(coarseGridOcean, |
| 100 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">I</font></span> <font color="#ff00ff">'cg.rc'</font>) |
| 101 |
|
|
<font color="#a020f0">CALL</font> EEsmfMakeGridComp( fineGridOceans, |
| 102 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> <font color="#ff00ff">'fg.rc'</font>) |
| 103 |
|
|
<font color="#a020f0">CALL</font> EEsmfMakeCplComp( fine2coarse, fineGridOceans, |
| 104 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> coarseGridOcean, |
| 105 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">I</font></span> <font color="#ff00ff">'f2c.rc'</font>) |
| 106 |
|
|
<font color="#a020f0">CALL</font> EEsmfMakeCplComp( coarse2fine, coarseGridOcean, |
| 107 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> fineGridOceans, |
| 108 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">I</font></span> <font color="#ff00ff">'c2f.rc'</font>) |
| 109 |
|
|
|
| 110 |
|
|
|
| 111 |
|
|
<font color="#a020f0">END SUBROUTINE</font> ComponentsInit |
| 112 |
|
|
|
| 113 |
|
|
<font color="#a020f0">SUBROUTINE</font> ComponentsRun( theComponents ) |
| 114 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfComponentList ), <font color="#2e8b57"><b>POINTER</b></font> :: theComponents |
| 115 |
|
|
<font color="#a020f0">END SUBROUTINE</font> ComponentsRun |
| 116 |
|
|
|
| 117 |
|
|
<font color="#a020f0">SUBROUTINE</font> ComponentsFinalize( theComponents ) |
| 118 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( EEsmfComponentList ), <font color="#2e8b57"><b>POINTER</b></font> :: theComponents |
| 119 |
|
|
<font color="#a020f0">END SUBROUTINE</font> ComponentsFinalize |
| 120 |
|
|
|
| 121 |
|
|
<font color="#a020f0">SUBROUTINE</font> PRMBoot( theResourceFile, theState ) |
| 122 |
|
|
|
| 123 |
|
|
<font color="#0000ff">! Routine arguments</font> |
| 124 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font><font color="#a52a2a"><b>*</b></font>(<font color="#a52a2a"><b>*</b></font>) :: theResourceFile |
| 125 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( PRMTopInternalState ), <font color="#2e8b57"><b>POINTER</b></font> :: theState |
| 126 |
|
|
|
| 127 |
|
|
<font color="#0000ff">! Local variables</font> |
| 128 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> rc |
| 129 |
|
|
<font color="#2e8b57"><b>TYPE</b></font> (ESMF_Config) :: cf |
| 130 |
|
|
<font color="#2e8b57"><b>INTEGER</b></font> :: nSets, nComps, I |
| 131 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font>(<font color="#2e8b57"><b>len</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1024</font>) :: fPref |
| 132 |
|
|
<font color="#2e8b57"><b>CHARACTER</b></font>(<font color="#2e8b57"><b>len</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1024</font>) :: cType |
| 133 |
|
|
|
| 134 |
|
|
<font color="#0000ff">! Boot PRMTop</font> |
| 135 |
|
|
|
| 136 |
|
|
<font color="#0000ff">! Allocate a PRMTop internal state object</font> |
| 137 |
|
|
<font color="#a52a2a"><b>ALLOCATE</b></font>( theState ) |
| 138 |
|
|
|
| 139 |
|
|
<font color="#0000ff">! Read PRM config</font> |
| 140 |
|
|
cf <font color="#a52a2a"><b>=</b></font> ESMF_ConfigCreate(rc) |
| 141 |
|
|
<font color="#a020f0">CALL</font> ESMF_ConfigLoadFile( cf, theResourceFile, rc <font color="#a52a2a"><b>=</b></font> rc) |
| 142 |
|
|
|
| 143 |
|
|
<font color="#0000ff">! Find how many sets of components have been requested.</font> |
| 144 |
|
|
<font color="#0000ff">! If the number requested is less than 1 it is an error.</font> |
| 145 |
|
|
<font color="#a020f0">CALL</font> EEsmf_ReadConfig( cf, label<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'nsets:'</font>, <font color="#a52a2a"><b>default</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font>, |
| 146 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> rVal<font color="#a52a2a"><b>=</b></font>theState%nSets, rc<font color="#a52a2a"><b>=</b></font>rc ) |
| 147 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( theState%nSets <font color="#a52a2a"><b><=</b></font> <font color="#ff00ff">0</font> ) <font color="#a52a2a"><b>THEN</b></font> |
| 148 |
|
|
<font color="#a52a2a"><b>STOP</b></font> <font color="#ff00ff">'ABNORMAL END:: PRMTop - nSets <= 0'</font> |
| 149 |
|
|
<font color="#a52a2a"><b>ENDIF</b></font> |
| 150 |
|
|
|
| 151 |
|
|
<font color="#0000ff">! Get basic details for each components set</font> |
| 152 |
|
|
<font color="#a52a2a"><b>ALLOCATE</b></font>( theState%cTypeArr(theState%nSets) ) |
| 153 |
|
|
<font color="#a52a2a"><b>ALLOCATE</b></font>( theState%fPrefArr(theState%nSets) ) |
| 154 |
|
|
<font color="#a52a2a"><b>ALLOCATE</b></font>( theState%nComps(theState%nSets) ) |
| 155 |
|
|
theState%nCTypeArr <font color="#a52a2a"><b>=</b></font> <font color="#ff00ff">0</font> |
| 156 |
|
|
theState%nFPrefArr <font color="#a52a2a"><b>=</b></font> <font color="#ff00ff">0</font> |
| 157 |
|
|
theState%nNComps <font color="#a52a2a"><b>=</b></font> <font color="#ff00ff">0</font> |
| 158 |
|
|
|
| 159 |
|
|
<font color="#a52a2a"><b>DO</b></font> I<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font>,theState%nSets |
| 160 |
|
|
<font color="#0000ff">! Get the component type for each component set.</font> |
| 161 |
|
|
<font color="#a020f0">CALL</font> EEsmf_ReadConfig( cf, label<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'ctype:'</font>, <font color="#a52a2a"><b>default</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'gridded'</font>, <font color="#6a5acd">index</font><font color="#a52a2a"><b>=</b></font>I, |
| 162 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> rVal<font color="#a52a2a"><b>=</b></font>theState%cTypeArr(I), rc<font color="#a52a2a"><b>=</b></font>rc ) |
| 163 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( rc <font color="#a52a2a"><b>.EQ.</b></font> ESMF_SUCCESS ) theState%nCTypeArr <font color="#a52a2a"><b>=</b></font> theState%nCTypeA<span style="background-color: #ffff00"><font color="#0000ff">rr+1</font></span> |
| 164 |
|
|
<font color="#0000ff">! Get the number of components to create for each component set.</font> |
| 165 |
|
|
<font color="#a020f0">CALL</font> EEsmf_ReadConfig( cf, label<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'counts:'</font>, <font color="#a52a2a"><b>default</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font>, <font color="#6a5acd">index</font><font color="#a52a2a"><b>=</b></font>I, |
| 166 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> rVal<font color="#a52a2a"><b>=</b></font>theState%nComps(I), rc<font color="#a52a2a"><b>=</b></font>rc ) |
| 167 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( rc <font color="#a52a2a"><b>.EQ.</b></font> ESMF_SUCCESS ) theState%nNComps <font color="#a52a2a"><b>=</b></font> theState%nNComps<font color="#a52a2a"><b>+</b></font><font color="#ff00ff">1</font> |
| 168 |
|
|
<font color="#0000ff">! Get the prefix label used to distinguish each component set.</font> |
| 169 |
|
|
<font color="#a020f0">CALL</font> EEsmf_ReadConfig( cf, label<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'preflist:'</font>, <font color="#a52a2a"><b>default</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'cg'</font>, <font color="#6a5acd">index</font><span style="background-color: #ffff00"><font color="#0000ff">=I, </font></span> |
| 170 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> rVal<font color="#a52a2a"><b>=</b></font>theState%fPrefArr(I), rc<font color="#a52a2a"><b>=</b></font>rc ) |
| 171 |
|
|
<font color="#a52a2a"><b>IF</b></font> ( rc <font color="#a52a2a"><b>.EQ.</b></font> ESMF_SUCCESS ) theState%nFPrefArr <font color="#a52a2a"><b>=</b></font> theState%nFPrefA<span style="background-color: #ffff00"><font color="#0000ff">rr+1</font></span> |
| 172 |
|
|
<font color="#a52a2a"><b>ENDDO</b></font> |
| 173 |
|
|
|
| 174 |
|
|
<font color="#a020f0">CALL</font> EEsmf_ReadConfig( cf, label<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">'topStartTime:'</font>, <font color="#a52a2a"><b>default</b></font><font color="#a52a2a"><b>=</b></font><font color="#ff00ff">0</font>, |
| 175 |
|
|
<span style="background-color: #ffff00"><font color="#0000ff">&</font></span> rVal<font color="#a52a2a"><b>=</b></font>theState%topStartTime, rc<font color="#a52a2a"><b>=</b></font>rc ) |
| 176 |
|
|
|
| 177 |
|
|
<font color="#a020f0">END SUBROUTINE</font> PRMBoot |
| 178 |
|
|
|
| 179 |
|
|
<font color="#a020f0">SUBROUTINE</font> PRMShut( theState ) |
| 180 |
|
|
|
| 181 |
|
|
<font color="#0000ff">! Routine arguments</font> |
| 182 |
|
|
<font color="#2e8b57"><b>TYPE</b></font>( PRMTopInternalState ), <font color="#2e8b57"><b>POINTER</b></font> :: theState |
| 183 |
|
|
|
| 184 |
|
|
<font color="#0000ff">! Free PRM internal data</font> |
| 185 |
|
|
<font color="#a52a2a"><b>DEALLOCATE</b></font>( theState%fPrefArr ) |
| 186 |
|
|
<font color="#a52a2a"><b>DEALLOCATE</b></font>( theState%cTypeArr ) |
| 187 |
|
|
<font color="#a52a2a"><b>DEALLOCATE</b></font>( theState%nComps ) |
| 188 |
|
|
|
| 189 |
|
|
<font color="#0000ff">! Free PRMTop internal state object</font> |
| 190 |
|
|
<font color="#a52a2a"><b>DEALLOCATE</b></font>( theState ) |
| 191 |
|
|
|
| 192 |
|
|
<font color="#a020f0">END SUBROUTINE</font> PRMShut |
| 193 |
|
|
|
| 194 |
|
|
<font color="#a020f0">END MODULE</font> PRMTop |
| 195 |
|
|
</pre> |
| 196 |
|
|
</body> |
| 197 |
|
|
</html> |