write_image_vtiCC Subroutine

public subroutine write_image_vtiCC(qunit, xO1, xO2, dxO1, dxO2, wO, nXO1, nXO2, nWO, nC1, nC2)

Uses

  • proc~~write_image_vticc~~UsesGraph proc~write_image_vticc write_image_vtiCC module~mod_global_parameters mod_global_parameters proc~write_image_vticc->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: qunit
double precision, intent(in) :: xO1(nXO1)
double precision, intent(in) :: xO2(nxO2)
double precision, intent(in) :: dxO1(nxO1)
double precision, intent(in) :: dxO2(nxO2)
double precision, intent(in) :: wO(nXO1,nXO2,nWO)
integer, intent(in) :: nXO1
integer, intent(in) :: nXO2
integer, intent(in) :: nWO
integer, intent(in) :: nC1
integer, intent(in) :: nC2

Calls

proc~~write_image_vticc~~CallsGraph proc~write_image_vticc write_image_vtiCC proc~get_line_info get_line_info proc~write_image_vticc->proc~get_line_info proc~mpistop mpistop proc~get_line_info->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~write_image_vticc~~CalledByGraph proc~write_image_vticc write_image_vtiCC proc~output_data output_data proc~output_data->proc~write_image_vticc proc~get_image get_image proc~get_image->proc~output_data proc~get_image_datresol get_image_datresol proc~get_image_datresol->proc~output_data proc~get_spectrum get_spectrum proc~get_spectrum->proc~output_data proc~get_spectrum_datresol get_spectrum_datresol proc~get_spectrum_datresol->proc~output_data proc~get_euv_image get_EUV_image proc~get_euv_image->proc~get_image proc~get_euv_image->proc~get_image_datresol proc~get_euv_spectrum get_EUV_spectrum proc~get_euv_spectrum->proc~get_spectrum proc~get_euv_spectrum->proc~get_spectrum_datresol proc~get_sxr_image get_SXR_image proc~get_sxr_image->proc~get_image proc~get_sxr_image->proc~get_image_datresol proc~get_whitelight_image get_whitelight_image proc~get_whitelight_image->proc~get_image

Source Code

    subroutine write_image_vtiCC(qunit,xO1,xO2,dxO1,dxO2,wO,nXO1,nXO2,nWO,nC1,&
       nC2)
      ! write image data to vti
      use mod_global_parameters

      integer, intent(in) :: qunit,nXO1,nXO2,nWO,nC1,nC2
      double precision, intent(in) :: xO1(nXO1),xO2(nxO2)
      double precision, intent(in) :: dxO1(nxO1),dxO2(nxO2)
      double precision, intent(in) :: wO(nXO1,nXO2,nWO)

      double precision :: origin(1:3), spacing(1:3)
      integer :: wholeExtent(1:6),extent(1:6)
      integer :: nP1,nP2,iP1,iP2,iw
      integer :: ixC1,ixC2,ixCmin1,ixCmax1,ixCmin2,ixCmax2

      integer :: filenr
      logical :: fileopen
      character (70) :: subname,wname,vname,nameL,nameS
      character (len=std_len) :: filename
      integer :: mass
      double precision :: logTe
      character (30) :: ion
      double precision :: line_center
      double precision :: spatial_rsl,spectral_rsl,sigma_PSF,wslit


      origin(1)=xO1(1)-0.5d0*dxO1(1)
      origin(2)=xO2(1)-0.5d0*dxO2(1)
      origin(3)=zero
      spacing(1)=dxO1(1)
      spacing(2)=dxO2(1)
      spacing(3)=zero
      wholeExtent=0
      wholeExtent(2)=nXO1
      wholeExtent(4)=nXO2
      nP1=nXO1/nC1
      nP2=nXO2/nC2

      ! get information of emission line
      if (convert_type=='EIvtiCCmpi') then
        call get_line_info(wavelength,ion,mass,logTe,line_center,spatial_rsl,&
           spectral_rsl,sigma_PSF,wslit)
      else if (convert_type=='ESvtiCCmpi') then
        call get_line_info(spectrum_wl,ion,mass,logTe,line_center,spatial_rsl,&
           spectral_rsl,sigma_PSF,wslit)
      endif

      if (mype==0) then
        inquire(qunit,opened=fileopen)
        if(.not.fileopen)then
          ! generate filename 
          filenr=snapshotini
          if (autoconvert) filenr=snapshotnext
          if (convert_type=='EIvtiCCmpi') then
            write(filename,'(a,i4.4,a)') trim(filename_euv),filenr,".vti"
          else if (convert_type=='SIvtiCCmpi') then
            write(filename,'(a,i4.4,a)') trim(filename_sxr),filenr,".vti"
          else if (convert_type=='WIvtiCCmpi') then
            write(filename,'(a,i4.4,a)') trim(filename_whitelight),filenr,&
               ".vti"
          else if (convert_type=='ESvtiCCmpi') then
            write(filename,'(a,i4.4,a)') trim(filename_spectrum),filenr,".vti"
          endif
          open(qunit,file=filename,status='unknown',form='formatted')
        endif

        ! generate xml header
        write(qunit,'(a)')'<?xml version="1.0"?>'
        write(qunit,'(a)',advance='no') '<VTKFile type="ImageData"'
        write(qunit,'(a)')' version="0.1" byte_order="LittleEndian">'
        write(qunit,'(a,3(1pe14.6),a,6(i10),a,3(1pe14.6),a)')&
           '  <ImageData Origin="',origin,'" WholeExtent="',wholeExtent,&
           '" Spacing="',spacing,'">'
        ! file info        
        write(qunit,'(a)')'<FieldData>'
        write(qunit,'(2a)')'<DataArray type="Float32" Name="TIME" ',&
           'NumberOfTuples="1" format="ascii">'
        write(qunit,*) real(global_time*time_convert_factor)
        write(qunit,'(a)')'</DataArray>'
        if (convert_type=='EIvtiCCmpi' .or. convert_type=='ESvtiCCmpi') then
          write(qunit,'(2a)')'<DataArray type="Float32" Name="logT" ',&
             'NumberOfTuples="1" format="ascii">'
          write(qunit,*) real(logTe)
          write(qunit,'(a)')'</DataArray>'
        endif
        write(qunit,'(a)')'</FieldData>'
        ! pixel/cell data
        do iP1=1,nP1
          do iP2=1,nP2
            extent=0
            extent(1)=(iP1-1)*nC1
            extent(2)=iP1*nC1
            extent(3)=(iP2-1)*nC2
            extent(4)=iP2*nC2
            ixCmin1=extent(1)+1
            ixCmax1=extent(2)
            ixCmin2=extent(3)+1
            ixCmax2=extent(4)
            write(qunit,'(a,6(i10),a)') '<Piece Extent="',extent,'">'
            write(qunit,'(a)')'<CellData>'
            do iw=1,nWO
              ! variable name
              if (convert_type=='EIvtiCCmpi') then
                if (wavelength<100) then
                  write(vname,'(a,i2)') "AIA",wavelength
                else if (wavelength<1000) then
                  write(vname,'(a,i3)') "AIA",wavelength
                else
                  write(vname,'(a,i4)') "IRIS",wavelength
                endif
                if (iw==2 .and. dat_resolution) vname='Doppler_velocity'
              else if (convert_type=='SIvtiCCmpi') then
                if (emin_sxr<10 .and. emax_sxr<10) then
                  write(vname,'(a,i1,a,i1,a)') "SXR",emin_sxr,"-",emax_sxr,&
                     "keV"
                else if (emin_sxr<10 .and. emax_sxr>=10) then
                  write(vname,'(a,i1,a,i2,a)') "SXR",emin_sxr,"-",emax_sxr,&
                     "keV"
                else
                  write(vname,'(a,i2,a,i2,a)') "SXR",emin_sxr,"-",emax_sxr,&
                     "keV"
                endif
              else if (convert_type=='WIvtiCCmpi') then
                if (iw==1) write(vname,'(a)')'B'
                if (iw==2) write(vname,'(a)')'pB'
              else if (convert_type=='ESvtiCCmpi') then
                if (spectrum_wl==1354) then
                  write(vname,'(a,i4)') "SG",spectrum_wl
                else
                  write(vname,'(a,i3)') "EIS",spectrum_wl
                endif
              endif
              write(qunit,'(a,a,a)')'<DataArray type="Float64" Name="',&
                 TRIM(vname),'" format="ascii">'
              write(qunit,'(200(1pe14.6))') ((wO(ixC1,ixC2,iw),ixC1=ixCmin1,&
                 ixCmax1),ixC2=ixCmin2,ixCmax2)
              write(qunit,'(a)')'</DataArray>'
            enddo
            write(qunit,'(a)')'</CellData>'
            write(qunit,'(a)')'</Piece>'
          enddo
        enddo
        ! end
        write(qunit,'(a)')'</ImageData>'
        write(qunit,'(a)')'</VTKFile>'
        close(qunit)
      endif

    end subroutine write_image_vtiCC