3 |
|
|
4 |
|
|
5 |
subroutine ctrl_set_pack_xyz( |
subroutine ctrl_set_pack_xyz( |
6 |
& cunit, ivartype, fname, masktype, |
& cunit, ivartype, fname, masktype, weighttype, |
7 |
& weightfld, lxxadxx, mythid) |
& weightfld, lxxadxx, mythid) |
8 |
|
|
9 |
c ================================================================== |
c ================================================================== |
13 |
c o Compress the control vector such that only ocean points are |
c o Compress the control vector such that only ocean points are |
14 |
c written to file. |
c written to file. |
15 |
c |
c |
16 |
|
c o Use a more precise nondimensionalization that depends on (x,y) |
17 |
|
c Added weighttype to the argument list so that I can geographically |
18 |
|
c vary the nondimensionalization. |
19 |
|
c gebbie@mit.edu, 18-Mar-2003 |
20 |
|
c |
21 |
c ================================================================== |
c ================================================================== |
22 |
|
|
23 |
implicit none |
implicit none |
42 |
integer ivartype |
integer ivartype |
43 |
character*( 80) fname |
character*( 80) fname |
44 |
character* (5) masktype |
character* (5) masktype |
45 |
|
character*( 80) weighttype |
46 |
_RL weightfld( nr,nsx,nsy ) |
_RL weightfld( nr,nsx,nsy ) |
47 |
logical lxxadxx |
logical lxxadxx |
48 |
integer mythid |
integer mythid |
69 |
_RL cbuff ( snx*nsx*npx*sny*nsy*npy ) |
_RL cbuff ( snx*nsx*npx*sny*nsy*npy ) |
70 |
_RL globmsk ( snx,nsx,npx,sny,nsy,npy,nr ) |
_RL globmsk ( snx,nsx,npx,sny,nsy,npy,nr ) |
71 |
_RL globfld3d( snx,nsx,npx,sny,nsy,npy,nr ) |
_RL globfld3d( snx,nsx,npx,sny,nsy,npy,nr ) |
72 |
|
#ifdef CTRL_PACK_PRECISE |
73 |
|
_RL weightfld3d( snx,nsx,npx,sny,nsy,npy,nr ) |
74 |
|
#endif |
75 |
|
|
76 |
|
character*(80) weightname |
77 |
|
|
78 |
c == external == |
c == external == |
79 |
|
|
116 |
c-- Only the master thread will do I/O. |
c-- Only the master thread will do I/O. |
117 |
_BEGIN_MASTER( mythid ) |
_BEGIN_MASTER( mythid ) |
118 |
|
|
119 |
|
#ifdef CTRL_PACK_PRECISE |
120 |
|
il=ilnblnk( weighttype) |
121 |
|
write(weightname(1:80),'(80a)') ' ' |
122 |
|
write(weightname(1:80),'(a)') weighttype(1:il) |
123 |
|
|
124 |
|
call MDSREADFIELD_3D_GL( |
125 |
|
& weightname, ctrlprec, 'RL', |
126 |
|
& Nr, weightfld3d, 1, mythid) |
127 |
|
#endif |
128 |
|
|
129 |
call MDSREADFIELD_3D_GL( |
call MDSREADFIELD_3D_GL( |
130 |
& masktype, ctrlprec, 'RL', |
& masktype, ctrlprec, 'RL', |
131 |
& Nr, globmsk, 1, mythid) |
& Nr, globmsk, 1, mythid) |
152 |
if (lxxadxx) then |
if (lxxadxx) then |
153 |
cbuff(cbuffindex) = |
cbuff(cbuffindex) = |
154 |
& globfld3d(i,bi,ip,j,bj,jp,k) * |
& globfld3d(i,bi,ip,j,bj,jp,k) * |
155 |
|
# ifdef CTRL_PACK_PRECISE |
156 |
|
& sqrt(weightfld3d(i,bi,ip,j,bj,jp,k)) |
157 |
|
# else |
158 |
& sqrt(weightfld(k,bi,bj)) |
& sqrt(weightfld(k,bi,bj)) |
159 |
|
# endif |
160 |
else |
else |
161 |
cbuff(cbuffindex) = |
cbuff(cbuffindex) = |
162 |
& globfld3d(i,bi,ip,j,bj,jp,k) / |
& globfld3d(i,bi,ip,j,bj,jp,k) / |
163 |
|
# ifdef CTRL_PACK_PRECISE |
164 |
|
& sqrt(weightfld3d(i,bi,ip,j,bj,jp,k)) |
165 |
|
# else |
166 |
& sqrt(weightfld(k,bi,bj)) |
& sqrt(weightfld(k,bi,bj)) |
167 |
|
# endif |
168 |
endif |
endif |
169 |
#else |
#else /* ALLOW_NONDIMENSIONAL_CONTROL_IO undef */ |
170 |
cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k) |
cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k) |
171 |
#endif |
#endif /* ALLOW_NONDIMENSIONAL_CONTROL_IO */ |
172 |
endif |
endif |
173 |
enddo |
enddo |
174 |
enddo |
enddo |