The only constrain we have is to implement the virtual methods of the FairField class. The simulation engines call the method:
void GetFieldValue(const Double_t point, Double_t* bField);
Which you have to implement in your subclass. Now how you calculate the field is up to you. if you look to PANDA there is different maps for the different regions (Solenoid, Dipole and the region between them).
Another example is the Hades implementation:
The class HadesField is forwarding the field value request to another class that make the calculation from the symmetry and the field map that is saved in cylindrical coordinates.
In other words Geant3/4 will call the method "GetFieldValue" above and you are free to calculate it as you like and fill the result in the bField.