denisbertini / mpi-sdf2opmd

SDF to openPMD compliant format via openpmd-api interface
GNU General Public License v3.0
7 stars 0 forks source link

Change converted E,B,J Field structure to match other PIC outputs #7

Open jhornung-gh opened 11 months ago

jhornung-gh commented 11 months ago

I have noticed that the structure after conversion is different compared to other openPMD PIC outputs like WarpX and PIConGPU.

Prominent here are E, B and J which are stored as e_x, e_y, e_z ... after conversion, e.g. the non-scalar fields. The other outpus are stored such that Ex = E["x"], Ey = E["y"], ... according to the E.axis_labels. The "combined" field E should have the typical attributes:

axis_labels: ['x', 'y','z'] (Depending on the dimension)
grid_global_offset: [x_offset, y_offset, z_offset]
grid_spacing: [dx,dy,dz]
grid_unit_SI: e.g. 1.5e-9
unit_dimension: [1.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0] (example for E field)
denisbertini commented 11 months ago

Thanks for this RFE! I am right now looking at implementing this new format.

denisbertini commented 11 months ago

@jhornung-gh this is a typical output from LWFA 3D picongpu simulation. I zoomed in the FIELDS part of the format:

      GROUP "fields" {
            ATTRIBUTE "chargeCorrection" {
               DATATYPE  H5T_STRING {
                  STRSIZE 4;
                  STRPAD H5T_STR_NULLTERM;
                  CSET H5T_CSET_ASCII;
                  CTYPE H5T_C_S1;
               }
               DATASPACE  SCALAR
            }
            ATTRIBUTE "currentSmoothing" {
               DATATYPE  H5T_STRING {
                  STRSIZE 4;
                  STRPAD H5T_STR_NULLTERM;
                  CSET H5T_CSET_ASCII;
                  CTYPE H5T_C_S1;
               }
               DATASPACE  SCALAR
            }
            ATTRIBUTE "fieldBoundary" {
               DATATYPE  H5T_STRING {
                  STRSIZE 8;
                  STRPAD H5T_STR_NULLTERM;
                  CSET H5T_CSET_ASCII;
                  CTYPE H5T_C_S1;
               }
               DATASPACE  SIMPLE { ( 6 ) / ( 6 ) }
            }
            ATTRIBUTE "fieldBoundaryParameters" {
               DATATYPE  H5T_STRING {
                  STRSIZE 31;
                  STRPAD H5T_STR_NULLTERM;
                  CSET H5T_CSET_ASCII;
                  CTYPE H5T_C_S1;
               }
               DATASPACE  SIMPLE { ( 6 ) / ( 6 ) }
            }
            ATTRIBUTE "fieldSolver" {
               DATATYPE  H5T_STRING {
                  STRSIZE 3;
                  STRPAD H5T_STR_NULLTERM;
                  CSET H5T_CSET_ASCII;
                  CTYPE H5T_C_S1;
               }
               DATASPACE  SCALAR
            }
            GROUP "B" {
               ATTRIBUTE "axisLabels" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 1;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "dataOrder" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 1;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "fieldSmoothing" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 4;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "geometry" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 9;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "gridGlobalOffset" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "gridSpacing" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "gridUnitSI" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "timeOffset" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "unitDimension" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SIMPLE { ( 7 ) / ( 7 ) }
               }
               DATASET "x" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
               DATASET "y" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
               DATASET "z" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
            }
            GROUP "E" {
               ATTRIBUTE "axisLabels" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 1;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "dataOrder" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 1;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "fieldSmoothing" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 4;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "geometry" {
                  DATATYPE  H5T_STRING {
                     STRSIZE 9;
                     STRPAD H5T_STR_NULLTERM;
                     CSET H5T_CSET_ASCII;
                     CTYPE H5T_C_S1;
                  }
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "gridGlobalOffset" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "gridSpacing" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
               }
               ATTRIBUTE "gridUnitSI" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "timeOffset" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SCALAR
               }
               ATTRIBUTE "unitDimension" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SIMPLE { ( 7 ) / ( 7 ) }
               }
               DATASET "x" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
               DATASET "y" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
               DATASET "z" {
                  DATATYPE  H5T_IEEE_F32LE
                  DATASPACE  SIMPLE { ( 192, 1024, 192 ) / ( 192, 1024, 192 ) }
                  ATTRIBUTE "position" {
                     DATATYPE  H5T_IEEE_F32LE
                     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
                  }
                  ATTRIBUTE "unitSI" {
                     DATATYPE  H5T_IEEE_F64LE
                     DATASPACE  SCALAR
                  }
               }
            }

Basically

jhornung-gh commented 11 months ago

Yes, excatly, thank you!

denisbertini commented 11 months ago

This RFE is completed with the commit 0ea8b0672bf0b17a4998f27ffe9428688eb82c82