1 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
2 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../generics.fypp" 1
11 # 56 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../generics.fypp"
12 # 2 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp" 2
13 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../instrumentation.fypp" 1
14 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../subr_list.fypp" 1
23 # 726 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../subr_list.fypp"
24 # 2 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../instrumentation.fypp" 2
33 # 112 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/../instrumentation.fypp"
34 # 3 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp" 2
44 use atlas_module,
only: atlas_field,atlas_fieldset,atlas_integer,atlas_real,atlas_functionspace,atlas_functionspace_nodecolumns, &
45 & atlas_functionspace_pointcloud,atlas_functionspace_structuredcolumns
54 # 23 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
55 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
57 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
59 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
61 # 26 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
62 # 23 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
63 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
65 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
67 # 24 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
69 # 26 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
70 # 27 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
73 # 30 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
74 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
76 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
78 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
80 # 33 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
81 # 30 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
82 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
84 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
86 # 31 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
88 # 33 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
89 # 34 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
100 # 45 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
101 # 46 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
111 type(atlas_field),
intent(in) :: afield
113 integer(kind_int),
intent(out) :: array(:,:)
114 character(len=*),
intent(in),
optional :: lev2d
117 integer :: nmga,nnodes,nl,nl0,nl2d,il0
119 integer(kind_int),
pointer :: ptr_1(:),ptr_2(:,:)
120 character(len=1024) :: llev2d
121 type(atlas_functionspace) :: afunctionspace
122 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
123 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
124 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
134 if (
present(lev2d)) llev2d = lev2d
135 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_int_r2',
'wrong lev2d')
138 if (afield%kind()/=atlas_integer(
kind_int))
call mpl%abort(
'atlas_field_to_array_int_r2',
'wrong kind for field '//afield%name())
141 afunctionspace = afield%functionspace()
143 select case (afunctionspace%name())
146 afunctionspace_nc = afield%functionspace()
149 nmga = afunctionspace_nc%nb_nodes()
152 afunctionspace_pc = afield%functionspace()
155 nmga = afunctionspace_pc%size()
156 case (
'StructuredColumns')
158 afunctionspace_sc = afield%functionspace()
161 nmga = afunctionspace_sc%size_owned()
163 call mpl%abort(
'atlas_field_to_array_int_r2',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
171 nnodes = product(shp(1:2-1))
173 nl0 = min(afield%levels(),nl)
176 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_to_array_int_r2',
'wrong number of nodes for field '//afield%name())
188 if (trim(llev2d)==
'first')
then
190 elseif (trim(llev2d)==
'last')
then
193 call afield%data(ptr_1)
194 array(:,nl2d) = ptr_1
198 call afield%data(ptr_2)
200 array(:,il0) = ptr_2(il0,:)
209 # 46 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
219 type(atlas_field),
intent(in) :: afield
221 real(kind_real),
intent(out) :: array(:,:)
222 character(len=*),
intent(in),
optional :: lev2d
225 integer :: nmga,nnodes,nl,nl0,nl2d,il0
227 real(kind_real),
pointer :: ptr_1(:),ptr_2(:,:)
228 character(len=1024) :: llev2d
229 type(atlas_functionspace) :: afunctionspace
230 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
231 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
232 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
242 if (
present(lev2d)) llev2d = lev2d
243 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_real_r2',
'wrong lev2d')
246 if (afield%kind()/=atlas_real(kind_real))
call mpl%abort(
'atlas_field_to_array_real_r2',
'wrong kind for field '//afield%name())
249 afunctionspace = afield%functionspace()
251 select case (afunctionspace%name())
254 afunctionspace_nc = afield%functionspace()
257 nmga = afunctionspace_nc%nb_nodes()
260 afunctionspace_pc = afield%functionspace()
263 nmga = afunctionspace_pc%size()
264 case (
'StructuredColumns')
266 afunctionspace_sc = afield%functionspace()
269 nmga = afunctionspace_sc%size_owned()
271 call mpl%abort(
'atlas_field_to_array_real_r2',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
279 nnodes = product(shp(1:2-1))
281 nl0 = min(afield%levels(),nl)
284 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_to_array_real_r2',
'wrong number of nodes for field '//afield%name())
287 array = 0.0_kind_real
296 if (trim(llev2d)==
'first')
then
298 elseif (trim(llev2d)==
'last')
then
301 call afield%data(ptr_1)
302 array(:,nl2d) = ptr_1
306 call afield%data(ptr_2)
308 array(:,il0) = ptr_2(il0,:)
317 # 154 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
318 # 45 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
319 # 46 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
329 type(atlas_field),
intent(in) :: afield
331 integer(kind_int),
intent(out) :: array(:,:,:)
332 character(len=*),
intent(in),
optional :: lev2d
335 integer :: nmga,nnodes,nl,nl0,nl2d,il0
337 integer(kind_int),
pointer :: ptr_1(:),ptr_2(:,:)
338 character(len=1024) :: llev2d
339 type(atlas_functionspace) :: afunctionspace
340 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
341 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
342 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
352 if (
present(lev2d)) llev2d = lev2d
353 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_int_r3',
'wrong lev2d')
356 if (afield%kind()/=atlas_integer(
kind_int))
call mpl%abort(
'atlas_field_to_array_int_r3',
'wrong kind for field '//afield%name())
359 afunctionspace = afield%functionspace()
361 select case (afunctionspace%name())
364 afunctionspace_nc = afield%functionspace()
367 nmga = afunctionspace_nc%nb_nodes()
370 afunctionspace_pc = afield%functionspace()
373 nmga = afunctionspace_pc%size()
374 case (
'StructuredColumns')
376 afunctionspace_sc = afield%functionspace()
379 nmga = afunctionspace_sc%size_owned()
381 call mpl%abort(
'atlas_field_to_array_int_r3',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
389 nnodes = product(shp(1:3-1))
391 nl0 = min(afield%levels(),nl)
394 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_to_array_int_r3',
'wrong number of nodes for field '//afield%name())
406 if (trim(llev2d)==
'first')
then
408 elseif (trim(llev2d)==
'last')
then
411 call afield%data(ptr_1)
413 array(:,:,nl2d) = reshape(ptr_1,shp(1:2))
416 call afield%data(ptr_2)
419 array(:,:,il0) = reshape(ptr_2(il0,:),shp(1:2))
427 # 46 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
437 type(atlas_field),
intent(in) :: afield
439 real(kind_real),
intent(out) :: array(:,:,:)
440 character(len=*),
intent(in),
optional :: lev2d
443 integer :: nmga,nnodes,nl,nl0,nl2d,il0
445 real(kind_real),
pointer :: ptr_1(:),ptr_2(:,:)
446 character(len=1024) :: llev2d
447 type(atlas_functionspace) :: afunctionspace
448 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
449 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
450 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
460 if (
present(lev2d)) llev2d = lev2d
461 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_real_r3',
'wrong lev2d')
464 if (afield%kind()/=atlas_real(kind_real))
call mpl%abort(
'atlas_field_to_array_real_r3',
'wrong kind for field '//afield%name())
467 afunctionspace = afield%functionspace()
469 select case (afunctionspace%name())
472 afunctionspace_nc = afield%functionspace()
475 nmga = afunctionspace_nc%nb_nodes()
478 afunctionspace_pc = afield%functionspace()
481 nmga = afunctionspace_pc%size()
482 case (
'StructuredColumns')
484 afunctionspace_sc = afield%functionspace()
487 nmga = afunctionspace_sc%size_owned()
489 call mpl%abort(
'atlas_field_to_array_real_r3',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
497 nnodes = product(shp(1:3-1))
499 nl0 = min(afield%levels(),nl)
502 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_to_array_real_r3',
'wrong number of nodes for field '//afield%name())
505 array = 0.0_kind_real
514 if (trim(llev2d)==
'first')
then
516 elseif (trim(llev2d)==
'last')
then
519 call afield%data(ptr_1)
521 array(:,:,nl2d) = reshape(ptr_1,shp(1:2))
524 call afield%data(ptr_2)
527 array(:,:,il0) = reshape(ptr_2(il0,:),shp(1:2))
535 # 154 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
536 # 155 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
538 # 157 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
548 type(atlas_field),
intent(in) :: afield
550 logical,
intent(out) :: array(:,:)
551 character(len=*),
intent(in),
optional :: lev2d
557 integer,
allocatable :: array_int(:,:)
558 character(len=1024) :: llev2d
568 if (
present(lev2d)) llev2d = lev2d
569 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_logical_r2',
'wrong lev2d')
572 allocate(array_int(
size(array,1),
size(array,2)))
579 # 198 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
580 do il0=1,
size(array,2)
581 do imga=1,
size(array,1)
582 if (array_int(imga,il0)==0)
then
583 array(imga,il0) = .false.
584 elseif (array_int(imga,il0)==1)
then
585 array(imga,il0) = .true.
587 call mpl%abort(
'atlas_field_to_array_logical_r2',
'wrong value in 0-1 integer field for field '//afield%name())
591 # 210 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
592 # 225 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
595 deallocate(array_int)
601 # 157 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
611 type(atlas_field),
intent(in) :: afield
613 logical,
intent(out) :: array(:,:,:)
614 character(len=*),
intent(in),
optional :: lev2d
620 integer,
allocatable :: array_int(:,:,:)
621 character(len=1024) :: llev2d
631 if (
present(lev2d)) llev2d = lev2d
632 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_to_array_logical_r3',
'wrong lev2d')
636 allocate(array_int(
size(array,1),
size(array,2),
size(array,3)))
642 # 210 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
643 # 211 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
644 do il0=1,
size(array,3)
645 do iya=1,
size(array,2)
646 do ixa=1,
size(array,1)
647 if (array_int(ixa,iya,il0)==0)
then
648 array(ixa,iya,il0) = .false.
649 elseif (array_int(ixa,iya,il0)==1)
then
650 array(ixa,iya,il0) = .true.
652 call mpl%abort(
'atlas_field_to_array_logical_r3',
'wrong value in 0-1 integer field for field '//afield%name())
657 # 225 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
660 deallocate(array_int)
666 # 234 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
668 # 236 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
669 # 237 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
679 type(atlas_field),
intent(inout) :: afield
681 integer(kind_int),
intent(in) :: array(:,:)
682 character(len=*),
intent(in),
optional :: lev2d
685 integer :: nmga,nnodes,nl,nl0,nl2d,il0
687 integer(kind_int),
pointer :: ptr_1(:),ptr_2(:,:)
688 character(len=1024) :: llev2d
689 type(atlas_functionspace) :: afunctionspace
690 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
691 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
692 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
702 if (
present(lev2d)) llev2d = lev2d
703 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_int_r2',
'wrong lev2d')
706 if (afield%kind()/=atlas_integer(
kind_int))
call mpl%abort(
'atlas_field_from_array_int_r2',
'wrong kind for field '//afield%name())
709 afunctionspace = afield%functionspace()
711 select case (afunctionspace%name())
714 afunctionspace_nc = afield%functionspace()
717 nmga = afunctionspace_nc%nb_nodes()
720 afunctionspace_pc = afield%functionspace()
723 nmga = afunctionspace_pc%size()
724 case (
'StructuredColumns')
726 afunctionspace_sc = afield%functionspace()
729 nmga = afunctionspace_sc%size_owned()
731 call mpl%abort(
'atlas_field_from_array_int_r2',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
739 nnodes = product(shp(1:2-1))
741 nl0 = min(afield%levels(),nl)
744 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_from_array_int_r2',
'wrong number of nodes for field '//afield%name())
753 if (trim(llev2d)==
'first')
then
755 elseif (trim(llev2d)==
'last')
then
758 call afield%data(ptr_1)
759 ptr_1 = array(:,nl2d)
763 call afield%data(ptr_2)
765 ptr_2(il0,:) = array(:,il0)
774 # 237 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
784 type(atlas_field),
intent(inout) :: afield
786 real(kind_real),
intent(in) :: array(:,:)
787 character(len=*),
intent(in),
optional :: lev2d
790 integer :: nmga,nnodes,nl,nl0,nl2d,il0
792 real(kind_real),
pointer :: ptr_1(:),ptr_2(:,:)
793 character(len=1024) :: llev2d
794 type(atlas_functionspace) :: afunctionspace
795 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
796 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
797 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
807 if (
present(lev2d)) llev2d = lev2d
808 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_real_r2',
'wrong lev2d')
811 if (afield%kind()/=atlas_real(kind_real))
call mpl%abort(
'atlas_field_from_array_real_r2',
'wrong kind for field '//afield%name())
814 afunctionspace = afield%functionspace()
816 select case (afunctionspace%name())
819 afunctionspace_nc = afield%functionspace()
822 nmga = afunctionspace_nc%nb_nodes()
825 afunctionspace_pc = afield%functionspace()
828 nmga = afunctionspace_pc%size()
829 case (
'StructuredColumns')
831 afunctionspace_sc = afield%functionspace()
834 nmga = afunctionspace_sc%size_owned()
836 call mpl%abort(
'atlas_field_from_array_real_r2',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
844 nnodes = product(shp(1:2-1))
846 nl0 = min(afield%levels(),nl)
849 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_from_array_real_r2',
'wrong number of nodes for field '//afield%name())
858 if (trim(llev2d)==
'first')
then
860 elseif (trim(llev2d)==
'last')
then
863 call afield%data(ptr_1)
864 ptr_1 = array(:,nl2d)
868 call afield%data(ptr_2)
870 ptr_2(il0,:) = array(:,il0)
879 # 342 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
880 # 236 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
881 # 237 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
891 type(atlas_field),
intent(inout) :: afield
893 integer(kind_int),
intent(in) :: array(:,:,:)
894 character(len=*),
intent(in),
optional :: lev2d
897 integer :: nmga,nnodes,nl,nl0,nl2d,il0
899 integer(kind_int),
pointer :: ptr_1(:),ptr_2(:,:)
900 character(len=1024) :: llev2d
901 type(atlas_functionspace) :: afunctionspace
902 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
903 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
904 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
914 if (
present(lev2d)) llev2d = lev2d
915 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_int_r3',
'wrong lev2d')
918 if (afield%kind()/=atlas_integer(
kind_int))
call mpl%abort(
'atlas_field_from_array_int_r3',
'wrong kind for field '//afield%name())
921 afunctionspace = afield%functionspace()
923 select case (afunctionspace%name())
926 afunctionspace_nc = afield%functionspace()
929 nmga = afunctionspace_nc%nb_nodes()
932 afunctionspace_pc = afield%functionspace()
935 nmga = afunctionspace_pc%size()
936 case (
'StructuredColumns')
938 afunctionspace_sc = afield%functionspace()
941 nmga = afunctionspace_sc%size_owned()
943 call mpl%abort(
'atlas_field_from_array_int_r3',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
951 nnodes = product(shp(1:3-1))
953 nl0 = min(afield%levels(),nl)
956 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_from_array_int_r3',
'wrong number of nodes for field '//afield%name())
965 if (trim(llev2d)==
'first')
then
967 elseif (trim(llev2d)==
'last')
then
970 call afield%data(ptr_1)
972 ptr_1 = reshape(array(:,:,nl2d),(/product(shp(1:2))/))
975 call afield%data(ptr_2)
978 ptr_2(il0,:) = reshape(array(:,:,il0),(/product(shp(1:2))/))
986 # 237 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
996 type(atlas_field),
intent(inout) :: afield
998 real(kind_real),
intent(in) :: array(:,:,:)
999 character(len=*),
intent(in),
optional :: lev2d
1002 integer :: nmga,nnodes,nl,nl0,nl2d,il0
1004 real(kind_real),
pointer :: ptr_1(:),ptr_2(:,:)
1005 character(len=1024) :: llev2d
1006 type(atlas_functionspace) :: afunctionspace
1007 type(atlas_functionspace_nodecolumns) :: afunctionspace_nc
1008 type(atlas_functionspace_pointcloud) :: afunctionspace_pc
1009 type(atlas_functionspace_structuredcolumns) :: afunctionspace_sc
1019 if (
present(lev2d)) llev2d = lev2d
1020 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_real_r3',
'wrong lev2d')
1023 if (afield%kind()/=atlas_real(kind_real))
call mpl%abort(
'atlas_field_from_array_real_r3',
'wrong kind for field '//afield%name())
1026 afunctionspace = afield%functionspace()
1028 select case (afunctionspace%name())
1029 case (
'NodeColumns')
1031 afunctionspace_nc = afield%functionspace()
1034 nmga = afunctionspace_nc%nb_nodes()
1037 afunctionspace_pc = afield%functionspace()
1040 nmga = afunctionspace_pc%size()
1041 case (
'StructuredColumns')
1043 afunctionspace_sc = afield%functionspace()
1046 nmga = afunctionspace_sc%size_owned()
1048 call mpl%abort(
'atlas_field_from_array_real_r3',
'wrong function space for field '//afield%name()//
': '//afunctionspace%name())
1056 nnodes = product(shp(1:3-1))
1058 nl0 = min(afield%levels(),nl)
1061 if (nmga/=nnodes)
call mpl%abort(
'atlas_field_from_array_real_r3',
'wrong number of nodes for field '//afield%name())
1070 if (trim(llev2d)==
'first')
then
1072 elseif (trim(llev2d)==
'last')
then
1075 call afield%data(ptr_1)
1077 ptr_1 = reshape(array(:,:,nl2d),(/product(shp(1:2))/))
1080 call afield%data(ptr_2)
1083 ptr_2(il0,:) = reshape(array(:,:,il0),(/product(shp(1:2))/))
1091 # 342 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1092 # 343 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1094 # 345 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1104 type(atlas_field),
intent(inout) :: afield
1105 type(
mpl_type),
intent(inout) :: mpl
1106 logical,
intent(in) :: array(:,:)
1107 character(len=*),
intent(in),
optional :: lev2d
1113 integer,
allocatable :: array_int(:,:)
1114 character(len=1024) :: llev2d
1124 if (
present(lev2d)) llev2d = lev2d
1125 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_logical_r2',
'wrong lev2d')
1128 allocate(array_int(
size(array,1),
size(array,2)))
1132 # 383 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1133 do il0=1,
size(array,2)
1134 do imga=1,
size(array,1)
1135 if (array(imga,il0))
then
1136 array_int(imga,il0) = 1
1138 array_int(imga,il0) = 0
1142 # 393 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1143 # 406 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1149 deallocate(array_int)
1155 # 345 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1165 type(atlas_field),
intent(inout) :: afield
1166 type(
mpl_type),
intent(inout) :: mpl
1167 logical,
intent(in) :: array(:,:,:)
1168 character(len=*),
intent(in),
optional :: lev2d
1174 integer,
allocatable :: array_int(:,:,:)
1175 character(len=1024) :: llev2d
1185 if (
present(lev2d)) llev2d = lev2d
1186 if (.not.((trim(llev2d)==
'first').or.(trim(llev2d)==
'last')))
call mpl%abort(
'atlas_field_from_array_logical_r3',
'wrong lev2d')
1190 allocate(array_int(
size(array,1),
size(array,2),
size(array,3)))
1193 # 393 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1194 # 394 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1195 do il0=1,
size(array,3)
1196 do iya=1,
size(array,2)
1197 do ixa=1,
size(array,1)
1198 if (array(ixa,iya,il0))
then
1199 array_int(ixa,iya,il0) = 1
1201 array_int(ixa,iya,il0) = 0
1206 # 406 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1212 deallocate(array_int)
1218 # 418 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/util/tools_atlas.fypp"
1229 integer,
intent(in) :: nmga
1230 real(kind_real),
intent(in) :: lon_mga(nmga)
1231 real(kind_real),
intent(in) :: lat_mga(nmga)
1232 type(atlas_functionspace),
intent(out) :: afunctionspace
1236 real(kind_real),
pointer :: real_ptr(:,:)
1237 type(atlas_field) :: afield
1246 afield = atlas_field(name=
'lonlat',kind=atlas_real(kind_real),shape=(/2,nmga/))
1247 call afield%data(real_ptr)
1249 real_ptr(1,imga) = lon_mga(imga)
1250 real_ptr(2,imga) = lat_mga(imga)
1254 afunctionspace = atlas_functionspace_pointcloud(afield)
Generic ranks, dimensions and types.